﻿using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using TccServicos.Models;
using TccServicos.Util;

namespace TccServicos.Controllers
{
    public class PessoaSenhaController : ApiController
    {
        #region Atributos
        private string sThread = "";
        #endregion

        #region WebApis do TCC Pessoa Senha
        [HttpPost]
        public RetornoServico VerificaSenha(Pessoa objeto)
        {
            sThread = Util.Util.NextHex(4);
            string nomeFuncao = string.Format("{0} [{1}]", "VerificaSenha", sThread);

            try
            {
                if (!Validacao.ObjetoValido(objeto))
                {
                    Log.GravarLog(string.Format("{0}: {1}", nomeFuncao, Validacao.objetoInvalido));
                }

                string jsonEntrada = JsonConvert.SerializeObject(objeto, new JsonSerializerSettings()
                {
                    NullValueHandling = NullValueHandling.Ignore
                });

                Log.GravarLog(string.Format("{0}: {1}", nomeFuncao, jsonEntrada));

                using (adoteEntities contexto = new adoteEntities())
                {
                    Pessoa informacaosCad = new Pessoa();
                    if (objeto.idPessoa > 0)
                    {
                        informacaosCad = (from t in contexto.CADASTRO_PESSOA.AsNoTracking()
                                          where t.ID_CADASTRO_PESSOA == objeto.idPessoa
                                          select new Pessoa()
                                          {
                                              senha = t.SENHA,
                                          }).FirstOrDefault();
                    }
                    
                    Log.GravarLog(string.Format("{0}: {1}", nomeFuncao, Validacao.salvoComSucesso));
                    if (informacaosCad != null && !string.IsNullOrEmpty(informacaosCad.senha) && informacaosCad.senha == objeto.senha)
                        return Util.Util.RetornoOk();
                    else
                        return Util.Util.RetornoErro("Senha não confere");
                }
            }
            catch (Exception ex)
            {
                Log.GravarLog(string.Format("{0} Erro: {1}", nomeFuncao, ex.ToString()));
                return Util.Util.RetornoErro(ex.ToString());
            }
        }

        [HttpGet]
        public RetornoServico GetSenha([FromUri] int? idPessoa = null)
        {
            sThread = Util.Util.NextHex(4);
            string nomeFuncao = string.Format("{0} [{1}]", "GetSenha", sThread);

            try
            {
                Log.GravarLog(string.Format("{0}: id={1}", nomeFuncao, idPessoa.HasValue ? idPessoa.Value.ToString() : "0"));

                using (adoteEntities contexto = new adoteEntities())
                {
                    var idPessoaPesquisa = idPessoa.HasValue ? idPessoa.Value : 0;
                    var consulta = (from t in contexto.CADASTRO_PESSOA.AsNoTracking()
                                    where t.ID_CADASTRO_PESSOA == idPessoaPesquisa
                                    select new Pessoa
                                    {
                                        email = t.EMAIL,
                                        nome = t.NOME,
                                        senha = t.SENHA,
                                        token = t.TOKEN,
                                    });
                    var retorno = consulta.FirstOrDefault();

                    Log.GravarLog(string.Format("{0}: {1}", nomeFuncao, Validacao.consultaComSucesso));

                    if (retorno != null)
                    {
                        if (!string.IsNullOrEmpty(retorno.email))
                        {
                            /*
                            System.Threading.Tasks.Task.Run(() =>
                                TccServicos.Servicos.Servicos.EnviaEmail(retorno.email,
                                "Busca Pet - Recuperação de senha", "Oi " + retorno.nome + ", sua senha é " + retorno.senha + ".",
                                "Abra o aplicativo e informe esta senha no seu Perfil."));
                            */
                            TccServicos.Servicos.Servicos.EnviaEmail(retorno.email,
                                "Busca Pet - Recuperação de senha", "Oi " + retorno.nome + ", sua senha é " + retorno.senha + ".",
                                "Abra o aplicativo e informe esta senha no seu Perfil.");
                        }
                        return Util.Util.RetornoOk();
                    }
                    else
                    {
                        return Util.Util.RetornoErro("Não foi possivel recuperar a senha");
                    }

                }
            }
            catch (Exception ex)
            {
                Log.GravarLog(string.Format("{0} Erro: {1}", nomeFuncao, ex.ToString()));
                return default(RetornoServico);
            }
        }
        #endregion
    }
}
